Шаг 262 - Использование Automation для работы с Internet Exploler

Итак, создаем приложение на базе диалогового окна с подключением Automation и с именем TestExploler. В начале нам нужно добавить информацию об объекте Exploler из библиотеки типов. Запускаем Class Wizard. Выбираем кнопку Add Class и в выпадающих вариантах From Type Library. Идем в папочку:

windows\system

И находим Shdocvw.dll. Выбираем его и нажимаем "Открыть". Появится диалоговое окно со списком классов, которые нужно добавить в проект. Мы выберем IWebBrowserApp и нажмем OK.

262_1.gif (5882 b)

Посмотрите вкладку ClassView и Вы найдете класс IWebBrowserApp. Если Вы попробуете скомпилировать проект, то у Вас это может не получиться, как у меня. Будет ошибка говорящая о том, что такой класс уже есть. Выход такой - переименовать. Для этого удобно использовать Replace:

IWebBrowserApp
	на
IWebBrowserApps

Подключаем описание класса и переменную класса к классу диалога:

// T1Dlg.h : header file
//

......
class CT1DlgAutoProxy;

#include "shdocvw.h"

///////////////////////////////////////////////////
// CT1Dlg dialog

class CT1Dlg : public CDialog
{
......
public:
	CT1Dlg(CWnd* pParent = NULL);	// standard constructor
	virtual ~CT1Dlg();
	IWebBrowserApps* mExps;
......
};

Создаем объект при создании окна и удаляем при удалении окна.

BOOL CTestExplolerDlg::OnInitDialog()
{
	......
	
	// TODO: Add extra initialization here
	mExp = new IWebBrowserApps;
	
	return TRUE; // return TRUE  unless you set the focus to a control
}

void CTestExplolerDlg::OnClose() 
{
	if (CanExit())
	{
		delete mExp;
		CDialog::OnClose();
	}
}

После создания класса его необходимо связать с реальным объектом:

BOOL CTestExplolerDlg::OnInitDialog()
{
	......
	
	// TODO: Add extra initialization here
	mExp = new IWebBrowserApps;
	if (!mExp->CreateDispatch("InternetExplorer.Application")) 
	{
		AfxMessageBox("Error Dispath"); 
		return FALSE;
	}
	
	return TRUE; // return TRUE  unless you set the focus to a control
}

Естественно, что запись об этом объекте должна быть в реестре в разделе HKEY_CLASSES_ROOT.

262_2.gif (4077 b)

Вот теперь все готово к использованию Explorer.

void CTestExplolerDlg::OnButton1() 
{
	COleVariant noArg;
	mExp->Navigate("http://www.firststeps.ru/",&noArg,&noArg,&noArg,&noArg); 
	mExp->SetVisible(TRUE); 
}

Мы просто воспользовались методами класса.

Hosted by uCoz